4  Data I/O

pacman::p_load(magrittr,rio,here)

载入和导出数据

数据导入和导出(import and output),是分析软件必备的功能,也是第一步操作。 R的数据导入功能尤其强大,得益于几个强大的package。

想一想,数据来源于哪?

4.1 内置数据

R的内置数据,其实都是rds或`rda``为扩展名的数据文件,这类文件是R输出的,是R的原生数据文件

想要调用他们也非常简单,比如R默认的内置方法data(),里面有很多示例数据, 你可以自己在电脑上试验一下,看看里面有哪些datasets。

同样,很多R 的package里面也有自己的datasets,可以查看一下

 ds1 <- data(package="cluster")   
  ds1$results %>% 
    as.data.frame() %>% 
    .[,3:4]

当你加载(library)一个包时,它里面的dataset也会同时加载,想要调用某个数据集,直接输入其名字即可。

library(cluster)
animals

4.2 载入/读取数据

载入数据窗口

表格数据的常见格式R都支持,可以在Rstudio直接操作(如图),并且不需要任何包就可以读取如csv、dcf、rds、rda R基础包,也就是没安装任何包之前,有一些基础函数,如read.csv,可以读取csv文件,读取完之后会将其作为一个data.frame对象。既可以读取本地,也可以读取网络链接。

df1 <- read.csv("https://labfile.oss.aliyuncs.com/courses/1283/mlbootcamp5_train.csv") %>% 
  head(10)  
class(df1)
[1] "data.frame"
df2 <- read.csv("dataset/Song.csv")
head(df2)

4.2.1 读取其他文件

数据读取的包还有几个,包括readr,它属于tidyverse系列的包之一,命令与R基础包非常相似,与前面不同的是读取到的数据会被当做tibble对象。

library(readr)

df3 <- read_csv("dataset/Song.csv")
class(df3)
[1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame" 

当然,我们别忘了,读取excel的文件,采用的是readxlpackage

library(readxl)
exceldf <- readxl_example("datasets.xlsx") 
quake <- read_excel(exceldf, sheet = "quakes")
head(quake,8)

此外,还有一个包haven,用来读取 SAS, SPSS, and Stata的数据文件 这里就不再用数据做演示了,只提供示例代码

library(haven)
sas_mydf <-read_sas("mydf.sas7bdat") # SAS文件读取
sav_mydf <-read_sav("mydf.sav") # SPSS
dta_mydf <-read_dta("mydf.dta") # Stata

4.3 导出数据

读取数据学会了,导出数据就非常简单,前面大家都能总结出一定规律,凡是读取数据,都是read开头,导出数据,都是write开头。需要用到的包可以是openxlsx或writexl

library(openxlsx)
write_csv(quake, "dataset/quake.csv")
write.xlsx(quake, "dataset/quake.xlsx")

4.4 瑞士军刀rio

前面,大家一定觉得,我要导入数据,为什么记这么多命令啊,难道不能一个包,统一命令?

rio号称是I/O的扛把子,瑞士军刀

只需要记住两个命令,import和export。简单多了吧!

library(rio)
import("dataset/quake.xlsx")
export(quake, "dataset/quake.rds")

4.5 其他数据获取方式

可以从数据库读取、API读取,还可以利用爬虫爬取。

  • Connecting to Databases: RSQLite
  • Web APIs
  • 爬虫(https://www.scraperapi.com/blog/web-scraping-with-r/)